#include <cstddef>
#include <initializer_list>
#include <iostream>
#include <map>
using namespace std;
// struct Point {
//     int _x;
//     int _y;
// };
// int main() {
//     int array1[] = {1, 2, 3, 4, 5};
//     int array2[2] = {0};
//     Point p = {1, 2};
//     return 0;
// }
// int main() {
//     // 对内置类型初始化
//     int x = {1}; // 加上了等于号
//     int y{1}; // 不加等于号

//     // 对于数组的初始化
//     int array1[] = {1, 2, 3, 4, 5}; // 加上了等于号
//     int array2[]{1, 2, 3, 4, 5}; // 不加等于号

//     // 对自定义类型初始化
//     Point p1 = {1, 2};  // 加上了等于号
//     Point p2{1, 2}; // 不加等于号

//     // 使用new表达式
//     int* nums1 = new int[4]{1, 2, 3, 4}; //
//     不能加上等于号(在我们的[]和{}之间)

//     return 0;
// }

// class Date {
//     public:
//         Date(int year = 0, int month = 0, int day = 0)
//             :_year(year)
//             ,_month(month)
//             ,_day(day) {
//                 cout << "Date(int year = 0, int month = 0, int day = 0)" <<
//                 endl;
//             }
//         Date(const Date& d)
//             :_year(d._year)
//             ,_month(d._month)
//             ,_day(d._day) {
//                 cout << "Date(const Date& d)" << endl;
//             }
//     private:
//         int _year;
//         int _month;
//         int _day;
// };
// int main() {
//     Date d1 = {2025, 10, 3};
//     return 0;
// }

// #include <iostream>
// #include <vector>
// #include <list>
// #include <map>
// using namespace std;
// int main() {
//     vector<int> nums1 = {1, 2, 3, 4, 5}; 
//     vector<int> nums2({1, 2, 3, 4, 5});
//     vector<int> nums3;
//     nums3 = {1, 2, 3, 4, 5};
//     list<int> l = {1, 2, 3, 4, 5};
//     map<string, string> m = {{"apple", "苹果"}, {"banana", "香蕉"}};
    
//     initializer_list<int> list;
//     list = {1, 2, 3};
//     int i = 0;
//     cout << list.begin() << endl;
//     cout << list.end() << endl;
//     cout << &i << endl; // 这里可以说明我们的数组是存放在栈上面的
//     return 0;
// }

// namespace xywl {
//     template <class T> class vector {
//     public:
//         typedef T *iterator;
//         vector(initializer_list<T> l) {
//             for (auto e : l)
//             push_back(e);
//         }
//     private:
//         iterator _start = nullptr;
//         iterator _finish = nullptr;
//         iterator _endofstorage = nullptr;
//     };
// } // namespace xywl


#include <iostream>
#include <vector>
using namespace std;
// int main() {
//     int x = 1;
//     auto ptr = &x;
//     cout << typeid(ptr).name() << endl; // int *
//     vector<int> nums{1, 2, 3, 4, 5};
//     auto it = nums.begin();
//     cout << *it << endl; // 1
//     return 0;
// }

// int main() {
//     const int x = 1;
//     auto y = x; // y是int类型
//     const auto& ref = x; // ref是const int&

//     return 0;
// }

// int main() {
//     int x = 1;
//     double y = 2.3;

//     decltype(x*y) ret;
//     cout << typeid(ret).name() << endl; // 是double类型
//     decltype(&x) ptr;
//     cout << typeid(ptr).name() << endl; // 是int* 类型
//     return 0;
// }

// template<class T1, class T2>
// auto Add(T1 x, T2 y) ->decltype(x + y)
// {
//     decltype(x + y) ret;
//     ret = x + y;
//     return ret;
// }
// int main() {
//     cout << typeid(decltype(Add(1, 2))).name() << endl;
//     cout << typeid(decltype(Add(1, 2.2))).name() << endl;
// }

// void foo(int x) {
//     std::cout << "int version" << std::endl;
// }

// void foo(char* x) {
//     std::cout << "char* version" << std::endl;
// }

// int main() {
//     foo(NULL); // void foo(int x)
//     foo(nullptr); // void foo(char* x)
//     return 0;
// }
// int main() {
//     int array[] = {1, 2, 3, 4, 5};
//     for(size_t i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
//         cout << array[i] << " ";
//     }
//     return 0;
// }


// int main() {
//     int array[] = {1, 2, 3, 4, 5};
//     for(auto& s : array) {
//         cout << s << " ";
//     }
//     return 0;
// }
// #include <iostream>
// #include <array>
// using namespace std;
// int main() {
//     array<int, 5> arr1 = {1, 2, 3, 4, 5};
//     array<string, 2> arr2 = {"apple", "banana"};
//     for(auto& s : arr1) {
//         cout << s << " ";
//     }
//     cout << endl;
//     cout << arr1.size() << endl;
//     return 0;
// }

// #include <iostream>
// #include <tuple>

// int main() {
//     std::tuple<int, double, char> tup = {1, 3.14, 'a'};
    
//     std::cout << "First: " << std::get<0>(tup) << std::endl;
//     std::cout << "Second: " << std::get<1>(tup) << std::endl;
//     std::cout << "Third: " << std::get<2>(tup) << std::endl;
    
//     return 0;
// }


// #include <iostream>
// #include <forward_list>

// int main() {
//     // 创建一个空的 forward_list
//     std::forward_list<int> flist;

//     // 向 forward_list 添加元素
//     flist.push_front(10);
//     flist.push_front(20);
//     flist.push_front(30);
//     flist.push_front(40);

//     // 遍历 forward_list
//     std::cout << "forward_list: ";
//     for (const auto& val : flist) {
//         std::cout << val << " ";
//     }
//     std::cout << std::endl;

//     return 0;
// }

// #include <iostream>
// #include <string>

// int main() {
//     int i = 123;
//     double d = 3.14159;
//     float f = 2.718f;

//     std::string str_int = std::to_string(i);    // 转换 int 为 string
//     std::string str_double = std::to_string(d); // 转换 double 为 string
//     std::string str_float = std::to_string(f);  // 转换 float 为 string

//     std::cout << "Integer to string: " << str_int << std::endl;
//     std::cout << "Double to string: " << str_double << std::endl;
//     std::cout << "Float to string: " << str_float << std::endl;

//     return 0;
// }


#include <iostream>
#include <string>

int main() {
    std::string str_int = "123";
    std::string str_double = "3.14159";
    std::string str_float = "2.718";

    int i = std::stoi(str_int);        // 将 string 转换为 int
    double d = std::stod(str_double);  // 将 string 转换为 double
    float f = std::stof(str_float);    // 将 string 转换为 float

    std::cout << "String to int: " << i << std::endl;
    std::cout << "String to double: " << d << std::endl;
    std::cout << "String to float: " << f << std::endl;

    return 0;
}
